package com.sky.mapper;

import com.github.pagehelper.Page;
import com.sky.anno.AutoFill;
import com.sky.dto.DishPageQueryDTO;
import com.sky.entity.Dish;
import com.sky.enumeration.OperationType;
import com.sky.result.PageResult;
import com.sky.vo.DishVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * PROJECT_NAME: sky-take-out
 * NAME: DishMapper
 * USER: SHINIAN
 * DATE: 2022/12/12
 * DESCRIPTION : B端-菜品信息持久层接口
 */
@Mapper
public interface DishMapper {

    /**
     * 基于分类Id查询菜品信息集合
     *
     * @param categoryId 菜品分类Id
     */
    List<Dish> selectDishByCategoryId(@Param("categoryId") Long categoryId);

    /**
     * 条件分页查询
     * @param dishPageQueryDTO
     * @return DishVO(包含了Dish的基本信息+Dish对应的分类名称)
     */
    Page<DishVO> selectByPage(@Param("dishPageQueryDTO") DishPageQueryDTO dishPageQueryDTO);

    /**
     * 新增菜品信息(包含菜品口味)
     * @param dish 菜品基本信息
     */
    @AutoFill(OperationType.INSERT)
    void insertDish(@Param("dish") Dish dish);


    /**
     * 根据id选择菜品
     *
     * @param dishId 菜id
     * @return {@link Dish}
     */
    Dish selectDishById(Long dishId);

    /**
     * 删除菜品信息
     * @param ids
     */
    void deleteDish(@Param("ids") List<Long> ids);

    /**
     * 更新菜品信息
     * @param dish 更新后的菜品完整信息Bean(▲包含菜品Id)
     * @return
     */
    @AutoFill(OperationType.UPDATE)
    void updateDish(@Param("dish") Dish dish);

    /**
     * 查询启售状态菜品数量
     * @param enable 启售状态
     * @param disable 停售状态
     * @return 启售状态菜品数量
     *
     */
    Integer selectDishCountByStatus(@Param("enable") Integer enable,@Param("disable") Integer disable);
}
